package com.shu;


import lombok.Data;

/**
 * @version v1.0
 * @类描述：
 * @项目名称：
 * @包名： com.shu
 * @类名称：WaitDemoRun
 * @创建人：YIHANG.XU
 * @创建时间：2020/10/103:10 下午
 * @修改人：YIHANG.XU
 * @修改时间：2020/10/103:10 下午
 * @修改备注：
 * @Copyright
 */
@Data
public class WaitDemoRun {
    private static volatile Object objectA = new Object();
    private static volatile Object objectB = new Object();


    /**
     * 当线程中的共享变量wait()方法的时候会将持有的锁信息释放掉，可以被另一个线程所获取到，
     * 就是线程堵塞会释放自己当前线程中持有的锁。
     * @param args
     */

    public static void main(String[] args) {
        new Thread(()->{
            synchronized(objectA ){
                System.out.println("A get AQS a");
                synchronized (objectB){
                    System.out.println("A get AQS b");
                    System.out.println("A put AQS a");
                    try {

                        objectA.wait();

                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                }
            }
        }).start();
        new Thread(()->{
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            synchronized(objectA ){
                System.out.println("B get AQS a");
                synchronized (objectB){
                    System.out.println("B get AQS b");
                    try {
                        objectA.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println("B put AQS a");

                }
            }
        }).start();
    }

}
